package busco

import (
	"wails/schema/config/battleco"
	"wails/schema/enums/busenum"
)

// 不同的得分可以具有相同的得分标识，因此需要一个可以存储这些数据的位置
// 场景：活跃度任务，需要达到100活跃度，这100分可以是登陆提供，可以是做任务提供。可通过创建不同的得分，设置相同的得分标识就可实现。
// @schema_export --ident=schema --json --config=得分
// @schema_go
// @cache_go
// @cache_ts
// @alias 得分
type B得分 struct {
	// @alias 标识
	B标识 string
	// @alias 名称
	M名称 string
	// @alias 描述
	M描述 string
	// @alias 图标
	T图标 string `link:"图标"`
	// @alias 标旗
	B标旗 map[busenum.E得分标旗]bool
	// @alias 初始值
	C初始值 float64
	// @alias 最小值
	Z最小值 float64
	// @alias 最大值
	Z最大值 float64
	// 当功能所在主体在角色之上时，可设置角色限制，单独限制角色的得分
	// 例如主体为游戏服的收集任务，需要收集1000个材料，角色限制为10，让更多的玩家可以参与
	// @alias 保存主体
	B保存主体 map[busenum.E得分保存主体]*S得分保存主体限制
	// @alias 显示
	X显示 S属性显示方式
	// @alias 显示小数位数
	X显示小数位数 int
	// @alias 战斗力转换
	Z战斗力转换 float64
	// @alias 转化比率
	Z转化比率 float64 `value:"1.0"`
	// @alias 加载重置
	C加载重置 map[busenum.T统计重置变量]bool
	// 开始统计得分的条件
	// @alias 开始条件
	C开始条件 map[string]string `link:"条件"`
	// 停止统计得分的条件
	// @alias 停止条件
	C停止条件 map[string]string `link:"条件"`
	// @alias 重置条件
	C重置条件 map[string]string `link:"条件"`
	// 获得得分时执行
	// @alias 获得执行
	H获得执行 string `link:"执行"`
	// 获得得分时奖励
	// @alias 获得奖励
	H获得奖励 string `link:"奖励"`
}

type S得分保存主体限制 struct {
	// @alias 初始值
	C初始值 float64
	// @alias 最小值
	Z最小值 float64
	// @alias 最大值
	Z最大值 float64
}

// @schema_export --ident=schema --json --config=得分
// @schema_go
// @cache_go
// @cache_ts
// @alias 得分_数量
type B得分_数量 struct {
	B得分
}

// @schema_export --ident=schema --json --config=得分
// @schema_go
// @cache_go
// @cache_ts
// @alias 得分_战斗结果
type B得分_战斗结果 struct {
	B得分
	// @alias 战斗结果
	Z战斗结果 busenum.Z战斗结果
}

// @schema_export --ident=schema --json --config=得分
// @schema_go
// @cache_go
// @cache_ts
// @alias 得分_充能
type B得分_充能 struct {
	B得分

	// 充能一次需要的时间
	// @alias 充能时间
	L充能时间 float64

	// 充能一次获得数量
	// @alias 充能数量
	L充能数量 float64

	// 耗尽能量时执行
	// @alias 耗尽执行
	H耗尽执行 string `link:"执行"`

	// 耗尽能量时奖励
	// @alias 耗尽奖励
	H耗尽奖励 string `link:"奖励"`

	// 充满能量时执行
	// @alias 充满执行
	C充满执行 string `link:"执行"`

	// 充满能量时奖励
	// @alias 充满奖励
	C充满奖励 string `link:"奖励"`
}

// @schema_export --ident=schema --json --config=得分
// @schema_go
// @cache_go
// @cache_ts
// @alias 得分_离线时长
type B得分_离线时长 struct {
	B得分
}

// @schema_export --ident=schema --json --config=得分
// @schema_go
// @cache_go
// @cache_ts
// @alias 得分_时长
type B得分_时长 struct {
	B得分

	// 与开始时间间隔的间隔将转化成得分
	// @alias 开始时间
	D开始时间 *S查找时间

	// todo: 未实现
	// 设置成秒, 则每秒获得1分
	// 设置成分, 则每分钟获得1分
	// @alias 得分单位
	C得分单位 busenum.S时间间隔单位

	// 触发得分的频率，避免频繁触发，默认为60秒
	// 单位秒
	// @alias 得分频率
	C得分频率 int
}

// @schema_export --ident=schema --json --config=得分
// @schema_go
// @cache_go
// @cache_ts
// @alias 得分_到达时间
type B得分_到达时间 struct {
	B得分

	// 到达时间后，得分加一，并进入【已关闭】状态
	// @alias 到达时间
	D到达时间 *S查找时间

	// @alias 到达时间后重置
	Y到达时间后重置 bool
}

// @schema_export --ident=schema --json --config=得分
// @schema_go
// @cache_go
// @cache_ts
// @alias 得分_击杀单位
type B得分_击杀单位 struct {
	B得分

	// @alias 被击杀单位
	B被击杀单位 map[string]string `link:"单位"`

	// 符合过滤器的单位
	// 1. 所在对象为玩家以下，有代表玩家，使用所在角色的玩家
	// 2. 所在对象为副本，无代表玩家，因此忽略
	// @alias 被击杀过滤器
	B被击杀过滤器 *battleco.S目标过滤器
}

// @schema_export --ident=schema --json --config=得分
// @schema_go
// @cache_go
// @cache_ts
// @alias 得分_事件
type B得分_事件 struct {
	B得分

	// @alias 监听事件
	J监听事件 map[string]interface{} `_type:"事件"`
}
